package com.sihai.ehr.service;

import java.util.List;

import com.sihai.core.Limit;
import com.sihai.core.LimitedList;
import com.sihai.core.Sorter;
import com.sihai.ehr.model.biz.InviteApply;
import com.sihai.ehr.model.biz.InviteApplyAuditing;
import com.sihai.ehr.model.biz.InviteArrange;
import com.sihai.ehr.model.biz.InviteFashion;
import com.sihai.ehr.model.sys.AuditStatus;
import com.sihai.ehr.model.sys.InviteEnum;
import com.sihai.ehr.web.pojo.InviteApplyPojo;
import com.sihai.ehr.web.pojo.InviteArrangePojo;

/**
 * 招聘服务接口
 * 
 * @author Henry
 */
public interface InviteService {
	/****************************************
	 * --------------招聘申请模块----------------
	 ****************************************/

	/**
	 * 获取招聘申请单元对象
	 * 
	 * @param id
	 *            招聘对象ID
	 * @return
	 */
	InviteApply getInviteApply(Long id);

	/**
	 * 根据组织关系及职务搜索招聘申请记录 
	 * @param organizationId
	 * @param dutyId
	 * @param auditStatus
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteApply> searchInviteAppliesByAuditStatus(Long organizationId,
			Long dutyId, AuditStatus auditStatus, Limit limit, Sorter sorter);
	
	/**
	 * 根据组织关系及职务搜索招聘申请记录
	 * 
	 * @param organizationId
	 *            组织关系ID
	 * @param dutyId
	 *            职务ID
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteApply> searchInviteApplies(Long organizationId,
			Long dutyId, Limit limit, Sorter sorter);

	/**
	 * 根据组织关系及职务搜索招聘申请未审核通过记录
	 * @param organizationId
	 * @param dutyId
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteApply> searchInviteAppliesByNotPassAudit(
			Long organizationId, Long dutyId, Limit limit, Sorter sorter);

	/**
	 * 根据组织关系及职务审核状态搜索招聘申请记录
	 * 
	 * @param organizationId
	 * @param dutyId
	 * @param limit
	 * @param sorter
	 * @return
	 */
	public LimitedList<InviteApply> searchInviteAppliesByPassAudit(
			Long organizationId, Long dutyId, Limit limit, Sorter sorter);

	/**
	 * 根据组织关系及职务搜索招聘申请记录
	 * 
	 * @param inviteApply
	 *            招聘申请对象
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteApply> searchInviteApplies(InviteApply inviteApply,
			Limit limit, Sorter sorter);

	/**
	 * 根据组织关系及职务搜索招聘申请记录
	 * 
	 * @param organizationId
	 * @param dutyId
	 * @param limit
	 * @param sorter
	 * @return
	 */
	public LimitedList<InviteApplyPojo> searchInviteAppliesTOPOJO(
			Long organizationId, Long dutyId, Limit limit, Sorter sorter);

	/**
	 * 保存招聘申请
	 * 
	 * @param inviteApply
	 */
	void saveInviteApply(InviteApply inviteApply);

	/**
	 * 移出招聘申请
	 * 
	 * @param inviteApplyIds
	 */
	void removeInviteApplys(String inviteApplyIds);

	/****************************************
	 * --------------招聘申请审核模块----------------
	 ****************************************/

	/**
	 * 获取招聘申请审核单元对象
	 * 
	 * @param id
	 * @return
	 */
	InviteApplyAuditing getInviteApplyAuditing(Long id);

	/**
	 * 根据组织关系编号及职务编号获取招聘申请审核结果记录
	 * 
	 * @param inviteApplyId
	 *            审核编号
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<List<InviteApplyAuditing>> searchApplyAuditings(Long inviteApplyId,
			Limit limit, Sorter sorter);

	/**
	 * 根据组织关系编号及职务编号获取招聘申请审核结果记录
	 * 
	 * @param inviteApplyAuditing
	 *            申请审核对象
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteApplyAuditing> searchApplyAuditings(
			InviteApplyAuditing inviteApplyAuditing, Limit limit, Sorter sorter);

	/**
	 * 保存审核流程
	 * 
	 * @param inviteApply
	 * @param auditNo
	 */
	void saveInviteApplyAuditingProcess(InviteApply inviteApply, int auditNo);

	/**
	 * 保存招聘申请审核对象
	 * 
	 * @param inviteApplyAuditing
	 */
	void saveInviteApplyAuditing(InviteApplyAuditing inviteApplyAuditing);

	/**
	 * 移出招聘申请审核记录集
	 * 
	 * @param inviteApplyAuditings
	 */
	void removeInviteApplyAuditings(String inviteApplyAuditings);

	/****************************************
	 * --------------招聘申请按排模块----------------
	 ****************************************/

	/**
	 * 获取招聘申请按排单元对象
	 * 
	 * @param id
	 * @return
	 */
	InviteArrange getInviteArrange(Long id);

	/**
	 * 根据招聘申请编号获取招聘安排
	 * 
	 * @param inviteId
	 * @return
	 */
	InviteArrange getInviteArrangeByApplyId(Long inviteId);

	/**
	 * 根据组织编号及职务编号获取招聘申请按排记录列表
	 * 
	 * @param organizationId
	 *            组织编号
	 * @param dutyId
	 *            职务编号
	 * @param inviteEnum
	 *            安排状态
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteArrangePojo> searchInviteArranges(Long organizationId,
			Long dutyId, InviteEnum inviteEnum, Limit limit, Sorter sorter);

	/**
	 * 搜索招聘申请安排列表
	 * 
	 * @param inviteArrange
	 *            招聘安排对象
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteArrange> searchInviteArranges(
			InviteArrange inviteArrange, Limit limit, Sorter sorter);

	/**
	 * 保存招聘申请安排对象
	 * 
	 * @param inviteArrange
	 */
	void saveInviteArrange(InviteArrange inviteArrange);

	/**
	 * 移出招聘申请安排对象集
	 * 
	 * @param inviteArrangeIds
	 */
	void removeInviteArranges(String inviteArrangeIds);

	/****************************************
	 * --------------招聘渠道模块----------------
	 ****************************************/

	/**
	 * 获取招聘渠道单元对象
	 * 
	 * @param id
	 * @return
	 */
	InviteFashion getInviteFashion(Long id);

	/**
	 * 根据HQL指定条件语句查询渠道列表
	 * 
	 * @param hql
	 *            HQL条件不带where
	 *            <p>
	 *            such as : channel like '%xx%'
	 *            </p>
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteFashion> searchFashions(String hql, Limit limit,
			Sorter sorter);

	/**
	 * 搜索招聘渠道列表
	 * 
	 * @param inviteFashion
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<InviteFashion> searchFashions(InviteFashion inviteFashion,
			Limit limit, Sorter sorter);

	/**
	 * 保存招聘渠道
	 * 
	 * @param inviteFashion
	 */
	void saveInviteFashion(InviteFashion inviteFashion);

	/**
	 * 移出招聘渠道
	 * 
	 * @param inviteFashionIds
	 */
	void removeInviteFashions(String inviteFashionIds);
}
